package com.zzyl.common.utils;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

import java.io.*;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

public class PdfUtils {

    public static String pdfToString(InputStream inputStream) {

        PDDocument document = null;


        try {
            // 加载PDF文档
            document = PDDocument.load(inputStream);

            // 创建一个PDFTextStripper实例来提取文本
            PDFTextStripper pdfStripper = new PDFTextStripper();

            // 从PDF文档中提取文本
            String text = pdfStripper.getText(document);
            return text;

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭PDF文档
            if (document != null) {
                try {
                    document.close();
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
}


//
//public class PdfUtils {
//    public static String pdfToString(InputStream is) {
//        if (is == null) {
//            throw new RuntimeException("输入流不能为空");
//        }
//
//        try {
//            // 将输入流转换为字节数组，避免流被多次读取的问题
//            byte[] pdfData = toByteArray(is);
//
//            // 使用字节数组加载，避免流相关问题
//            PDDocument document = null;
//            try {
//                // 使用最小化配置加载PDF
//                document = PDDocument.load(pdfData);
//
//                // 创建文本提取器
//                PDFTextStripper pdfTextStripper = new PDFTextStripper();
//
//                // 设置提取参数以最小化字体依赖
//                pdfTextStripper.setSortByPosition(true);
//                pdfTextStripper.setSuppressDuplicateOverlappingText(true);
//
//                // 提取文本
//                String text = pdfTextStripper.getText(document);
//                return text != null ? text.trim() : "";
//
//            } finally {
//                // 确保文档正确关闭
//                if (document != null) {
//                    try {
//                        document.close();
//                    } catch (Exception e) {
//                        // 静默关闭
//                    }
//                }
//            }
//        } catch (Exception e) {
//            // 提供详细的错误信息但不暴露内部实现
//            throw new RuntimeException("读取PDF文件失败: " + e.getMessage());
//        }
//    }
//
//    private static byte[] toByteArray(InputStream inputStream) throws IOException {
//        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
//        int nRead;
//        byte[] data = new byte[8192]; // 增大缓冲区提高效率
//        while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
//            buffer.write(data, 0, nRead);
//        }
//        buffer.flush();
//        return buffer.toByteArray();
//    }
//}

//
//public class PdfUtils {
//    public static String pdfToString(InputStream is) {
//        PDDocument document = null;
//        try {
//            document = PDDocument.load(is);
//            PDFTextStripper pdfTextStripper = new PDFTextStripper();
//            String text = pdfTextStripper.getText(document);
//            return text;
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        } finally {
//            try {
//                document.close();
//                is.close();
//            } catch (IOException e) {
//                throw new RuntimeException(e);
//            }
//        }
//    }
//}


